﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Configuration;
using DataTier.Repository;
using BusinessLogic.Entities;
using BusinessLogic.Helpers;

namespace BusinessLogic.ServiceClients
{
    public class AuthClient
    {


        public AuthClient()
        {
        }


        /// <summary>
        /// Возвращает роль, применяемую к анонимному пользователю
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public RoleEntity GetAnonimusRole()
        {
            try
            {
                int roleId = Convert.ToInt32(ConfigurationManager.AppSettings["AnonimusRoleId"]);
                var role = new AuthRepository().GetAnonimusRole(roleId);
                return EntityHelper.GetRoleEntity(role);
            }
            catch (Exception ex)
            {
                throw;
            }
        }


        /// <summary>
        /// Возвращает полную информацию о пользователе и его правах доступа
        /// </summary>
        /// <param name="DomainLoginName"></param>
        /// <returns></returns>
        public UserSecurityDetails GetUserSecurityDetails(string DomainLoginName)
        {
            var user = new AuthRepository().GetUserSecurityDetails(DomainLoginName);
            return EntityHelper.GetUserSecurityDetails(user);
        }


        /// <summary>
        /// Проводит аутентификацию пользователя
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="hashPassword"></param>
        /// <returns>1-ok, 2-заблокирован, 0 - не верный логин/пароль</returns>
        public int AuthenticateUser(string userName, string hashPassword)
        {
            int auth = new AuthRepository().AuthenticateUser(userName, hashPassword);
            return auth;
        }


        /// <summary>
        /// Регистрирует нового пользователя
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="hashPassword"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public UserSecurityDetails RegisterUser(string userName, string hashPassword, string email)
        {
            var user = new UserRepository().RegisterUser(userName, hashPassword, email);
            return EntityHelper.GetUserSecurityDetails(user);
        }


        /// <summary>
        /// Формирование Хэша пароля
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public string CalcHash(string password)
        {
            return new UserRepository().CalcHash(password);
        }

    }
}